using DG.Tweening;
using UnityEngine;

namespace MLTimeline.Demo
{
    [System.Serializable]
    public class DOTweenClip : TweenClip
    {
        public Transform target;
        public float tweenDuration; // 这个Tween动画本身的时长

        // 运行时的数据，不需要被序列化保存到文件里
        [System.NonSerialized]
        public object activeTween; // 用object类型来解耦具体Tween库（如DOTween.Tween）

        // 在剪辑开始时创建Tween
        public override void Enter()
        {
            if (target == null) return;

            // 【示例：使用DOTween】
            // 关键：创建后立即暂停，并设置为手动更新模式
            activeTween = target.DOMoveX(10, tweenDuration)
                .SetAutoKill(false)
                .Pause();
        }

        // 在剪辑播放的每一帧驱动Tween
        public override void Evaluate(int frame, float progress, float frameRate)
        {
            if (activeTween == null) return;

            // 【示例：使用DOTween】
            var tween = activeTween as Tween;
            if (tween == null) return;

            // 魔法发生的地方：我们为Tween提供一个恒定的、由帧率决定的“虚拟时间增量”
            tween.Goto(tween.position * progress);
        }

        // 在剪辑结束时销毁Tween
        public override void Exit()
        {
            if (activeTween == null) return;

            // 【示例：使用DOTween】
            (activeTween as Tween)?.Kill();
            activeTween = null;
        }
    }
}